home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / tango2.lha / SOURCES / fucked.s < prev    next >
Text File  |  1988-07-19  |  7KB  |  322 lines

  1.  
  2.     opt c-
  3.     section blitter,code_c            Chip Ram please !!
  4.     include    df1:definitions            Give me some hardware reggies
  5.     include    df1:macros                Give me some macros
  6.     
  7.         
  8. ;LOCAL CONSTANTS
  9.  
  10. icra        equ $bfed01                
  11. allocmem     =-30-168                
  12. freemem     =-30-180                
  13. fontmemory    =4000
  14.  
  15.         
  16.  
  17. TAKEOVER:
  18.         
  19.     LEA custom,a5        
  20.     LEA GFXLIB(PC),a1             Point to 'graphics.library'
  21.     MOVEQ #0,D0                     Doesn't matter which version
  22.      MOVE.L 4.w,a6                 EXECBASE
  23.     jsr    -132(a6)                 task switching off (forbid)
  24.      JSR -$228(a6)                  Openlibrary
  25.      MOVE.L D0,GFXBASE             Store library address
  26.  
  27.         
  28. ;Now put the graphic addresses in the CopperList         
  29.  
  30.      move.l    #sin_screen,d1        Bitplane memory address
  31.      move.w    d1,bp1lo+2
  32.      swap    d1
  33.      move.w    d1,bp1hi+2
  34.  
  35.     
  36.      move.l GFXBASE,d0            Move gfxbase offset to d0
  37.      MOVE.L D0,A6                
  38.      MOVE.W #$80,dmacon(a5)        Turn off copper whilst changing it
  39.      MOVE.L $32(A6),WBCOPPER         Store old (WBench) copper address
  40.      MOVE.L #OURCOPPER,$32(A6)    Point to new copper list (our own)
  41.      MOVE.W #$8080,dmacon(a5)    re-enable copper
  42.  
  43.      MOVE.W #$8010,intena(a5)        
  44.      MOVE.L $6c,old                Save work bench interrupt
  45.      MOVE.L #LEV3,$6c            This sets up a level 3 interrupt
  46.     move.w    intenar(a5),systemints
  47.     move.b    #%01111111,icra        Kill keyboard
  48.         
  49. WAIT:     
  50.     BTST #6,$BFE001                This waits for the left
  51.      BNE.S    WAIT                mouse button to be pressed
  52.     move.l    4.w,a6                EXECBASE
  53.      MOVE.L old,$6c                Restore system interrupts
  54.     MOVE.L GFXBASE,A6
  55.      MOVE.W #$80,dmacon(a5)        Disable DMA
  56.      MOVE.L WBCOPPER,$32(A6)        Restore old copperlist
  57.      MOVE.W #$8080,dmacon(a5)    Enable DMA
  58.      move.w    systemints,d0        Systems interrupt
  59.      or.w    #$c000,d0
  60.      move.w    d0,intena(a5)        Enable OS interrupts
  61.      move.b    #%10011011,icra        Enable keyboard
  62.     clr.w    $dff0a8                Clear music
  63.     clr.w    $dff0b8
  64.     clr.w    $dff0c8
  65.     clr.w    $dff0d8
  66.     move.w    #$f,$dff096
  67.     rts
  68.  
  69.  
  70. ERROR:    
  71.     move.l 4.w,a6                Get EXECBASE
  72.     jsr    -138(a6)                Permit ( multi-tasking on )
  73.     moveq    #0,d0                Clear d0
  74.      RTS                            Return to AmigaDOS
  75.  
  76.  
  77. ;This is the NEW level 3 interrupt
  78.  
  79. LEV3:
  80.      MOVEM.L d0-d7/a0-a6,-(sp)    Save all registers to the stack
  81.     lea    custom,a5
  82.     AND #$10,intreqr(a5)           Check if interrupt is from Copper 
  83.     BNE out
  84.     move.w    #$8010,$9c                                
  85.  
  86.  
  87.     bsr    try_sin
  88.     bsr    scroll
  89.  
  90.     
  91.  
  92. out:     
  93.     MOVEM.L (sp)+,d0-d7/a0-a6    Restore the registers
  94.     DC.W $4ef9                    hex value for  JMP instruction
  95. old:     
  96.     DC.L 0                        will jump to normal interrupt
  97.  
  98. ; ** THE SCROLL ROUTINE **
  99.  
  100. scroll
  101.     cmp.l    #15,val                    Blitshifted all <<<
  102.     blo.s    coarse_scroll_it        No then get doing it !!
  103.     bsr        blit_char                Blit letter to screen
  104.     clr.l    val                        Reset index
  105. coarse_scroll_it:
  106.     bsr        coarse                    Scroll all line
  107.     rts                            
  108.     
  109.     
  110. ; ** BLIT LETTER ON THE SCREEN **
  111.  
  112. blit_char
  113.     jsr        text
  114.     lea        custom,a5                Get custom chip address
  115.     move.l    screenx,a0                 Can~t see this picture !!
  116.     move.l    #font,a1                 Put font in blitter source
  117.     add.l    d1,a1
  118. blit_test:
  119.     btst    #14,$dff002                 Blitter busy !!!
  120.     bne    blit_test                     Lets wait till she finishes !
  121.     move.w    #$ffff,bltafwm(a5)        Mask (DON'T NEED ONE)
  122.     move.w    #$ffff,bltalwm(a5)        Mask (DON'T NEED ONE)
  123.     move.l    a0,bltdpth(a5)             Blitter dest D (BOTTOM OF SCREEN)
  124.     move.l    a1,bltapth(a5)             Blitter source A (SCROLLING FONT)
  125.     move.w    #38,bltamod(a5)             Modulo (20-1)*2
  126.     move.w    #38,bltdmod(a5)             Modulo (20-1)*2
  127.     move.w    #$9f0,bltcon0(a5)         Minterms D=A
  128.     clr.w    bltcon1(a5)                 Set Ascending mode
  129.      move.w    #16*64+1,bltsize(a5)     Blit size (SIZE OF FONT)
  130.     rts                                  Return
  131.  
  132.  
  133. ; ** BLITSHIFT THE ENTIRE SCROLL LINE (BETTER THAN USING THE HARDWARE).
  134.  
  135. coarse:
  136.     lea        custom,a5                 
  137.     move.l    screenx,a0                ; Can~t see this picture !!
  138.     move.l    a0,a1
  139.     add.l    #2,a1
  140. blit_wait:
  141.     btst    #14,$dff002            
  142.     bne        blit_wait
  143.     incl    #4,val                    ; (1 for slower)
  144.     move    #12,d7                    ; Amount of pixels to shift(15 for slow)
  145.     ror        #4,d7                    ; Set to correct bits (12-15)
  146.     or        #%100111110000,d7        
  147.     move.l    #-1,bltafwm(a5)
  148.     move.l    a1,bltapth(a5)
  149.     move.l    a0,bltdpth(a5)
  150.     move.w    #0,bltamod(a5)
  151.     move.w    #0,bltdmod(a5)
  152.     move.w    d7,bltcon0(a5)    
  153.     move.w    #80*64+20,bltsize(a5)
  154.     rts    
  155.  
  156.  
  157. ; ** BLITTER CLEAR WHERE THE SINE SCROLL HAS JUST BEEN **
  158.  
  159. CLEAR:
  160.     Move.l    #sin_screen,a0
  161. wate
  162.     btst    #14,$dff002
  163.     bne.s    wate
  164.     Move.l    a0,Bltdpth(a5)
  165.     Move    #0,Bltdmod(a5)
  166.     Move.l    #$1f00000,Bltcon0(a5)
  167.     Move    #150*64+20,Bltsize(a5)
  168.     Rts
  169.  
  170.  
  171.  
  172. try_sin:
  173.     move.w    #38,bltamod(a5)             
  174.     move.w    #38,bltdmod(a5)             
  175.     move.w    #38,bltbmod(a5)             
  176.     move.w    #$dfc,bltcon0(a5)         
  177.     move.l    screenx,a0                 ; Source A
  178.     move.l    #sin_screen,a1
  179.     move.l    sinpointer,a2
  180.     move.b    #20,d4
  181. blitloop:
  182.     moveq    #3,d1
  183.     move.l    #8,d2
  184. inloop:
  185.     move.l    a1,a3
  186.     cmp.l    #$ffff,(a2)
  187.     bne.s    nowblit
  188.     lea.l    sintab,a2
  189. nowblit:
  190.     add.l    (a2),a3
  191. bbb:btst    #14,$dff002
  192.     bne.s    bbb            
  193.     move.l    a0,bltapth(a5)             
  194.     move.l    a3,bltdpth(a5)             
  195.     move.l    a3,bltbpth(a5)             
  196.     move.w    d1,bltafwm(a5)        
  197.     move.w    d1,bltalwm(a5)        
  198.      move.w    #1025,bltsize(a5)     
  199.     lsl.w    #2,d1
  200.     dbf        d2,inloop
  201.     add.l    #2,a0                    ; Get next letter along
  202.     add.l    #2,d6
  203.     dbf        d4,blitloop
  204.     add.l    #4,sinpointer
  205.     move.l    sinpointer,a0
  206.     cmp.l    #$ffff,(a0)
  207.     bne.s    rre
  208.     move.l    #sintab,sinpointer
  209. rre:rts    
  210.     
  211. sinpointer:    dc.l    0
  212.  
  213. sintab:
  214.     dc.l    40,80,120,160,200,240,280,320,360,400,440,480,520
  215.     dc.l    560,600,640,680,$ffff,$ffff
  216.     EVEN
  217.     
  218.     
  219. ; ** CHARACTER DECODER ROUTINE **
  220.  
  221. text:
  222.     move.l    acurent,a2                Get message
  223.     clr.l    d1                        
  224.     move.b    (a2)+,d1                Update it
  225.     move.b    d1,letter                Store in offset
  226.     cmp.b    #255,d1                    Check for end of message
  227.     beq.w    rst_text                If equal, then reset
  228.     sub.l    #32,d1                    Subract 32 (ie space)
  229.     asl        d1                        Times by 2 
  230.     move.l    a2,acurent                Update acurent
  231.     CMP.B    #"4",letter                Is letter "K" or larger
  232.     BPL.s    add_more                If larger then add on
  233.     rts                                Return
  234. add_more:
  235.     CMP.B    #"H",letter                Is letter "U" or larger
  236.     BPL.S    add_more2                If larger then add on
  237.     add.l    #40*15,d1                Get next line down (KLMNOPQRST)
  238.     rts
  239. add_more2:                    
  240.     add.l    #40*30,d1                Get next line down (UVWXYZ0123)
  241.     rts
  242. rst_text:
  243.     move.l    #0,d1
  244.     move.l    #message,d2                Get begining of text
  245.     move.l    d2,acurent                Reset to begining
  246.     rts                                Return
  247.  
  248.  
  249. message:
  250.  
  251. ; *=FACE    
  252.  
  253.     DC.B    "TANGO OF CRYPTIC UK PRESENTS A SMALL INTRO NO WAY NEAR"
  254.     DC.B    " FINISHED.    "
  255.     DC.B    255
  256.     EVEN
  257.             
  258.  
  259. ; ** THE COPPERLIST **
  260.  
  261. OURCOPPER:
  262.         dc.w    $120,0
  263.         dc.w    $122,0
  264.         dc.w    bpl1mod,0,bpl2mod,0
  265.         dc.w    diwstrt,$2c81+32,diwstop,$2cc1-32
  266.         dc.w    bplcon0,$1200,bplcon1,$0000
  267.         dc.w    ddfstrt,$38,ddfstop,$d0
  268.         dc.w    color00,$000,color01,$094
  269. bp1lo:    dc.w    bpl1ptl,$0000
  270. bp1hi:    dc.w    bpl1pth,$0000
  271.         end_copper
  272.         
  273.  
  274. ;LOCAL CONSTANTS
  275.  
  276. WBCOPPER:        DC.L    0
  277. GFXLIB:            DC.B     "graphics.library",0
  278. GFXBASE:        DC.L    0
  279. systemints:        dc.l    0
  280. scroll_offset:    dc.l    0
  281. screenx:        dc.l    picture
  282. letter:            dc.b    0
  283. acurent:        dc.l    message
  284. val:            dc.l    0
  285.  
  286.  
  287. ;BINARY FILES TO BE INCLUDED
  288.     EVEN
  289. picture    
  290.     dcb.b    10240,0
  291. sin_screen:
  292.     dcb.b    10240,0
  293. font
  294.     incbin    df1:neatfont.bin
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.     
  305.     
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.     
  314.     
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.